package com.shenma2009.netty.server;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import org.springframework.stereotype.Component;


/**
 * @author 12692
 * @version 1.0
 * @description: WebSocketNettyServer
 * https://juejin.cn/post/7030777971472826404
 * @date 2023/5/26 17:02
 */

@Component
public class WebSocketNettyServer {

    /**
     * Netty服务器启动对象
     */
    private final ServerBootstrap serverBootstrap;

    public WebSocketNettyServer() {
        serverBootstrap = new ServerBootstrap();
        // 初始化服务器启动对象
        // 主线程池
        NioEventLoopGroup mainGrp = new NioEventLoopGroup();
        // 从线程池
        NioEventLoopGroup subGrp = new NioEventLoopGroup();
        serverBootstrap
                // 指定使用上面创建的两个线程池
                .group(mainGrp, subGrp)
                // 指定Netty通道类型
                .channel(NioServerSocketChannel.class)
                // 指定通道初始化器用来加载当Channel收到事件消息后
                .childHandler(new WebSocketChannelInitializer());
    }

    /**
     * @description 启动websocket服务
     * @author 12692
     * @date 2023/5/27 11:18
     * @version 1.0
     * 服务地址： ws://127.0.0.1:12424/ws
     */
    public void start() {
        // 绑定服务器端口，以异步的方式启动服务器
        System.out.println("SERVER:"+"开始启动服务...");
        ChannelFuture future = serverBootstrap.bind(12424);
        System.out.println("SERVER:"+"启动服务成功...");

    }
}


